
/**
 * @file TEST_timy_shell.c
 * @author Linquan 
 * @brief 
 * @version 0.1
 * @date 2024-12-07
 * 
 * @copyright Copyright (c) 2024
 * 
 * @history:
 * 	2025-3-31:
 * 		1、将中断中接受的数据，移动到主循环中进行解析处理，提高中断接受数据的速度，不丢包。
 *		2、增加log 打印功能，支持最大32种类型打印，可选择全部打印或打印部分类型log。
 *		3、优化help命令说明的打印格式。
 *	2025-4-3：
 *		1、将tiny shell 分离成独立的文件，将本文件作为测试例程：
			创建一个线程，模拟外部中断接受数据，进行命令接收。
			向主任务链表中添加 打印任务，根据log打印开启和关闭进行打印输出。
			运行本例程后，输入 DBON 即可开启全部打印内容，
				输入 DBON 0 即可开启 RUN PARA 的打印，不开启 SET PARA打印。
				DBOFF 同理
 * 
 */

#include "app_config.h"
#if TEST_TINT_SHELL

#include "tiny_shell.h"
#include <pthread.h>



/**
 * @brief 
 *  创建一个线程，用于接受 外界数据输入
 */
void * thread_tiny_shell_loop(void * arg)
{
	char rcv_char;
  
	printf("**************************\r\n");
	printf("  !!! tiny shell !!! \r\n");
	printf("**************************\r\n");

	while (1)
	{
		/* 1.1、从外部输入获得一个字符,例如串口中断接受*/ 
		rcv_char = getchar();

		/* 1.2、将接受的一个数据，填充到 缓冲区  */ 
		tiny_shell_save_data(rcv_char);

		/* 2、在主循环中解析接受到的命令 */ 
		tiny_shell_anayly();
	}
}
 
void tiny_shell_init(void *ptr)
{
   	pthread_t tiny_shell_thread;
	pthread_create(&tiny_shell_thread, NULL, thread_tiny_shell_loop, NULL);
}
EXPORT_Lv5_ENVIRMENT(tiny_shell_init, NULL);



/**
 * @brief 创建一个 打印任务，根据命令行传入的 启动或关闭打印类型进行打印
 * 
 * @param args 
 * @return int 
 */
int task_log_print(task_param_t* args)
{
	static uint8_t cycle_num = 0;
	
	LOG_INFO(RUN_PARA, "---RUN PARA %d ---\r\n", cycle_num);
	LOG_INFO(SET_PARA, "+++SET PARA %d +++\r\n", cycle_num);

	cycle_num++;
	return MS_(1000) ; 
}


/**
 * @brief 按照export 结构体的函数指针 建立添加函数.将 log打印任务 添加到主任务链表中
 * 
 * @param ptr 
 */
void Add_task_log_print(void* ptr)
{
    Master_task_add(&task_log_print, 0);
}
EXPORT_Lv6_APP_SINGLE(Add_task_log_print,NULL);







#endif
